/**
 * 数组处理的方法
 * 1、遍历的方法，
 *      for of
 *      
 *      以下方法，只能处理数组
 *      forEach map filter reduce some every find findIndex
 *      
 */


// 1、for of 只能遍历可迭代的对象
// 例如 Array、string、Map、Set、arguments
var arr1 = [1,2,3,4,5];
for (const item of arr1) {
    // console.log(item)
}

// 2、forEach(val, index, 数组本身)
// 遍历数组的值
var arr2 = [1,2,3,4,5]
arr2.forEach((item, index, self) => {
    // console.log(item, index, self)
})

// 3、mao(val, index, 数组本身)
// 遍历数组，返回一个新的数组，数组的length和原来的相同
var arr3 = [1,2,3,4,5]
var newArr3 = arr3.map((item, index, self) => {
    // console.log(item, index, self)
    return item*2
})
// console.log(newArr3)



// 4、filter(value, index, 数组本身)
// 对数据，进行过滤，返回新的数组
var arr4 = [{
    val: 10
}, {
    val: 21
}, {
    val: 22
}, {
    val: 30
}]
var newArr4 = arr4.filter((item, index, self) => {
    // console.log(item, index, self)
    return item.val >= 20 && index >= 2
})
// console.log(newArr3)

// 5、some(val, index, 数组本身)
// 遍历数组，查找是否存在符合条件的值，找到则返回true，并终止遍历，没有找到，则继续，一直没找到，返回false
var arr5 = ['zhangsan', 'lisi', 'wangwu']
var flag5 = arr5.some(item => item === 'zhangsan')
// console.log(flag5)

// 6、every(val, index, 数组本身)
// 遍历数组，查找是否存在符合条件的值，所有的条件都符合才返回true，有一项不符合，则返回false，并终止遍历
var arr6 = ['zhangsan', 'lisi', 'wangwu']
var flag6 = arr6.every(item => item === 'zhangsan')
// console.log(flag6)

// 7、reduce(accumulator, currentValue, currentIndex, array)
// reduce求和
var arr7 = [{
    val: 10
}, {
    val: 20
}, {
    val: 20
}, {
    val: 30
}]
// console.log('arr7', arr7)

var sum7 = arr7.reduce((pre, next) => pre + next.val, 0)
// console.log(sum7)

// reduce求和去重
var arr7 = ['bozai', 'bo', 'bo', 'haha', 'haha']
var newArr7 = arr7.reduce((accumulator, current) => {
    return accumulator.includes(current) ? accumulator : accumulator.concat(current);
}, []);
// console.log(newArr7)

// 8、find(value, index, arr)
// 遍历查找满足条件的值，当条件满足就返回该值，并终止循环
var arr8 = [1, 2, 3, 4, 5, 6]
var val8 = arr8.find(item => {
    console.log(item) // 1 2 3
    return item > 2
})
// console.log(val8) // 3

// 9、findIndex(value, index, arr)
// 遍历查找满足条件的值，当条件满足就返回该值的索引，并终止循环
var arr9 = [10,20,30,40,50,60]
var val9 = arr9.findIndex(item => {
    return item > 23
})
console.log(val9) // 2